home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / chunky.lha / lib_chunky / tst-src / test3.c < prev    next >
C/C++ Source or Header  |  1998-02-27  |  6KB  |  275 lines

  1. /*
  2. ** test3.c
  3. **
  4. ** Tests the various text functions and prints the execution time
  5. **
  6. ** compile me with
  7. ** gcc -noixemul -s -m68020 -O2 -o test3 test3.c -lchunky -lm
  8. */
  9. #define __CONSTLIBBASEDECL__  const
  10. #include  <exec/execbase.h>
  11. #include  <intuition/screens.h>
  12. #include  <graphics/gfx.h>
  13. #include  <hardware/custom.h>
  14. #include  <hardware/cia.h>
  15. #include  <hardware/dmabits.h>
  16.  
  17. #include  <proto/exec.h>
  18. #include  <proto/intuition.h>
  19. #include  <proto/graphics.h>
  20.  
  21. #include  <stdlib.h>
  22. #include  <time.h>
  23.  
  24. #include  "../lib-src/chunky.h"
  25.  
  26. #ifndef __GNUC__
  27. extern  __far struct CIA    ciaa;
  28. extern  __far struct CIA    ciab;
  29. extern  __far struct Custom custom;
  30. #else
  31. extern struct CIA     ciaa;
  32. extern struct CIA     ciab;
  33. extern struct Custom  custom;
  34. #endif
  35.  
  36. #define SX  640
  37. #define SY  480
  38. #define CX  640
  39. #define CY  480
  40.  
  41. struct  Screen      *scr;
  42. struct  RastPort    *rp;
  43. struct  ChunkyPort  *cp;
  44.  
  45.  
  46. /*///"Time functions"*/
  47. void PTimeStart( BOOL dmaoff )
  48. {
  49.     WaitTOF();
  50.     Forbid();
  51.     Disable();
  52.  
  53.     if( dmaoff )  custom.dmacon = DMAF_MASTER;
  54.  
  55.     ciab.ciacra = 0;      /* Timer a und b stoppen */
  56.     ciab.ciacrb = 0;
  57.  
  58.     ciab.ciatalo= 0xff;    /* TimerA = $ffff */
  59.     ciab.ciatahi= 0xff;
  60.  
  61.     ciab.ciatblo= 0xff;    /* TimerB = $ffff */
  62.     ciab.ciatbhi= 0xff;
  63.  
  64.     /* TimerB start mit INMODE1 set, da 32bit-Zähler */
  65.     ciab.ciacrb = CIACRBF_START|CIACRBF_INMODE1;
  66.  
  67.     /* TimerA start normal */
  68.     ciab.ciacra = CIACRAF_START;
  69.  
  70. }
  71.  
  72. ULONG PTimeStop( void )
  73. {
  74.     ULONG cycles;
  75.  
  76.     ciab.ciacra = 0;  /* Timer a und b stoppen */
  77.     ciab.ciacrb = 0;
  78.  
  79.     cycles =  0xffffffff -
  80.                         ( ( ciab.ciatalo ) + ( ciab.ciatahi * 0x100 ) +
  81.                             ( ciab.ciatblo * 0x10000 ) + ( ciab.ciatbhi * 0x1000000 ) );
  82.  
  83.     custom.dmacon = DMAF_SETCLR | DMAF_MASTER;
  84.  
  85.     Enable();
  86.     Permit();
  87.     return( cycles );
  88. }
  89.  
  90. void PPrintTime( char *head, ULONG val )
  91. {
  92.     struct ExecBase *sb = SysBase;
  93.     ULONG correct;
  94.     ULONG realtime;
  95.     ULONG etime = sb->ex_EClockFrequency;
  96.  
  97.     /* Calculate real time needed */
  98.     PTimeStart( 0 );
  99.     correct = PTimeStop();
  100.  
  101.     realtime = val - correct;
  102.  
  103.     printf( "Elapsed time for function %s: %f sec. \n", (LONG )head,
  104.     (float )((float )realtime/(float )etime ) );
  105. }
  106. /*///*/
  107. ///"Test functions "
  108. void chk_draw( struct ChunkyPort *cp )
  109. {
  110.     // Draw some text into the cp
  111.     int i;
  112.     int sx, sy = cp->cp_TxHeight;
  113.     int x, y;
  114.     char  *text = "This is a test...";
  115.  
  116.     rpt_clear();
  117.     srand( (unsigned )time(NULL));
  118.  
  119.     sx = TextLength( rp, text, strlen( text ) );
  120.  
  121.     for( i= 0; i<512; i++ ){
  122.         SetAPenChk( cp, i%255);
  123.  
  124.         x = rand() % (CX-sx);
  125.         y = cp->cp_TxBaseline + ( rand() % (CY-sy-cp->cp_TxBaseline) );
  126.  
  127.         MoveChk( cp, x, y );
  128.         TextChk( cp, text );
  129.     }
  130. }
  131.  
  132. void rpt_clear( void )
  133. {
  134.     SetRast( rp, 0 );
  135.     SetChunky( cp, 0 );
  136.     WaitBlit();
  137. }
  138.  
  139. void rpt_test( void )
  140. {
  141.     // Draw some text into the rp
  142.     int i;
  143.     int sx, sy = rp->TxHeight;
  144.     int x, y;
  145.     char  *text = "This is a test...";
  146.  
  147.     rpt_clear();
  148.     SetDrMd( rp, JAM1 );
  149.  
  150.     PTimeStart(0);
  151.     srand( (unsigned )time(NULL));
  152.  
  153.     sx = TextLength( rp, text, strlen( text ) );
  154.  
  155.     for( i= 0; i<512; i++ ){
  156.         SetAPen( rp, i%255);
  157.  
  158.         x = rand() % (CX-sx);
  159.         y = rp->TxBaseline + ( rand() % (CY-sy-rp->TxBaseline) );
  160.  
  161.         Move( rp, x, y );
  162.         Text( rp, text, strlen( text ) );
  163.     }
  164.  
  165.     PPrintTime("rpt_test", PTimeStop());
  166. }
  167. void chk_test( void )
  168. {
  169.     int    x = (SX-CX)/2, y = (SY-CY)/2;
  170.  
  171.     PTimeStart(0);
  172.     chk_draw(cp);
  173.     PPrintTime("chk_test", PTimeStop());
  174.  
  175.     DrawChunkyPort( cp, rp, (SX-CX)/2, (SY-CY)/2 );
  176.  
  177. }
  178.  
  179. void chk_test2( void )
  180. {
  181.     int hshadow = 4, hshine = 5, shadow = 1, shine = 2;
  182.     int y = 18, sy = 18;
  183.     int i;
  184.     // clear rastport and chunkyPort
  185.     rpt_clear();
  186.  
  187.     srand( (unsigned )time(NULL));
  188.  
  189.     PTimeStart(0);
  190.  
  191.     SetSoftStyleChk( cp, FS_NORMAL );
  192.     SetABOPenChk( cp, shadow, shine, 0 );
  193.     TextCenterChk( cp, "This is a FS_NORMAL test", y );
  194.     y+=20;
  195.     SetSoftStyleChk( cp, FSF_BOLD );
  196.     SetABOPenChk( cp, shadow, shine, 0 );
  197.     TextCenterChk( cp, "This is a FSF_BOLD test", y );
  198.     y+=20;
  199.     SetSoftStyleChk( cp, FSF_OUTLINE );
  200.     SetABOPenChk( cp, shine, 0, shadow );
  201.     TextCenterChk( cp, "This is a FSF_OUTLINE test", y );
  202.     y+=20;
  203.     SetSoftStyleChk( cp, FSF_3D );
  204.     SetABOPenChk( cp, shine, shadow, 0 );
  205.     TextCenterChk( cp, "This is a FSF_3D test", y );
  206.     y+=20;
  207.     SetSoftStyleChk( cp, FSF_WIDE3D );
  208.     SetABOPenChk( cp, shine, shadow, 0 );
  209.     TextCenterChk( cp, "This is a FSF_WIDE3D test", y );
  210.     y+=20;
  211.     SetSoftStyleChk( cp, FSF_EMBOSSED );
  212.     SetABOPenChk( cp, shadow, hshadow, hshine );
  213.     TextCenterChk( cp, "This is a FSF_EMBOSSED test", y );
  214.     y+=20;
  215.     SetSoftStyleChk( cp, FSF_BOLD|FSF_OUTLINE );
  216.     SetABOPenChk( cp, shine, 0, shadow );
  217.     TextCenterChk( cp, "This is a FSF_BOLD|FSF_OUTLINE test", y );
  218.     y+=20;
  219.     SetSoftStyleChk( cp, FSF_BOLD|FSF_3D );
  220.     SetABOPenChk( cp, shine, shadow, 0 );
  221.     TextCenterChk( cp, "This is a FSF_BOLD|FSF_3D test", y );
  222.     y+=20;
  223.     SetSoftStyleChk( cp, FSF_BOLD|FSF_EMBOSSED );
  224.     SetABOPenChk( cp, shadow, hshadow, hshine );
  225.     TextCenterChk( cp, "This is a FSF_BOLD|FSF_EMBOSSED test", y );
  226.  
  227.     PPrintTime( "chk_test2", PTimeStop());
  228.     DrawChunkyPort( cp, rp, (SX-CX)/2, (SY-CY)/2 );
  229.     Delay( 100 );
  230. }
  231. ///
  232. ///"main function"
  233. int main( void )
  234. {
  235.     ULONG cols[ 8*3+1 ] =  {  0x00060000,
  236.                                                         0x95959595, 0x95959595, 0x95959595,
  237.                                                         0x00000000, 0x00000000, 0x00000000,
  238.                                                         0xffffffff, 0xffffffff, 0xffffffff,
  239.                                                         0x34343434, 0x3e3e3e3e, 0xa7a7a7a7,
  240.                                                         0x7b7b7b7b, 0x7b7b7b7b, 0x7b7b7b7b,
  241.                                                         0xafafafaf, 0xafafafaf, 0xafafafaf };
  242.  
  243.  
  244.     if( scr = OpenScreenTags( NULL, SA_DisplayID, 0x39024,    // VGA: Productivity
  245.                                                                     SA_Width,     SX,
  246.                                                                     SA_Height,    SY,
  247.                                                                     SA_Depth,     8,
  248.                                                                     SA_FullPalette, TRUE,
  249.                                                                     SA_Interleaved, TRUE,
  250.                                                                     SA_Colors32,  (ULONG )&cols,
  251.                                                                     SA_Title,     (ULONG )"Chunky Text Functions Test",
  252.                                                                     TAG_DONE ) )
  253.     {
  254.         rp = &scr->RastPort;
  255.  
  256.         if( cp = InitChunkyPort( CX, CY ) )
  257.         {
  258.  
  259.             /* Draw something */
  260.             SetFontChk( cp, rp->Font );
  261.  
  262.             chk_test();
  263.             rpt_test();
  264.  
  265.             // Test new SoftStyleFlags
  266.             chk_test2();
  267.             FreeChunkyPort( cp );
  268.         }
  269.         Delay( 300 );
  270.         CloseScreen( scr );
  271.     }
  272. }
  273. ///
  274.  
  275.